package Homework;

import java.util.TreeSet;

/**
 * @author DCSGO
 * @version 1.0
 */

@SuppressWarnings({"all"})
public class Homework04 {
    //1.试分析 HashSet 和 TreeSet 分别如何实现去重的
    //答:
    //(1) HashSet的去重机制: hashCode() + equals()
    //    底层先通过存入对象 进行运算得到一个 hash 值
    //    通过 hash 值得到对应的索引 如果发现 table 索引所在的位置
    //    没有数据 就直接存放 如果有数据 就进行 equals 比较[遍历比较]
    //    如果比较后 不相同 就加入 否则就不加入
    //(2) TreeSet的去重机制: 如果传入了 Comparator 匿名对象
    //    就使用重写的 compare 去重 如果方法返回 0 就认为是相同的元素/数据
    //    就不添加 如果没有传入一个 Comparator 匿名对象
    //    则以添加的对象实现的 Compareable 接口的 compareTo 去重

    //2.代码分析:
    //下面代码运行会不会抛出异常,并从源码层面说明原因
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add(new Person());

        //ClassCastException: Homework.Person cannot be cast to java.lang.Comparable
        //add 方法在添加元素时若没有传入 比较器
        //则会运行如下代码
        //Comparable<? super K> k = (Comparable<? super K>) key;
        //此时若 添加的对象没有实现 Comparable 接口就会抛出异常
    }
}

class Person {
}